#pragma once
#include "types.hpp"
#include <vector>
#include <iostream>

// 良い感じの3次元配列のラッパー無いかなー・・・
// adaptor

//////////////////////////////////////////////////////////////////
// CField
//
class CMob;
///マップフィールドの管理
class CField
{
public:
	/// フィールドの成分
	struct Cell
	{
		/// Mobへのポインタ（Nullable）
		CMob* pMob;
		
		bool hasMob();
		Cell()
			: pMob(0)
		{
		}
	};

public:
	CField(uint h = 9, uint w = 9, uint d = 3);
	~CField();

	uint getHeight() const { return height; }	///< Get height
	uint getWidth() const { return width; }	///< Get width
	uint getDepth() const { return depth; }	///< Get depth

//	const Cell& get(const position_t& pos) const;
	Cell& operator[](const position_t& pos) const;

	void putMob(CMob& mob, position_t pos);
	void removeMob(position_t pos);

	void print() const;

private:
	uint
		width,	///< Width
		height,	///< Height
		depth;	///< Depth

	/**
	* @brief Array of Cell
	*/
	Cell* const field;
};

